#include "dopasuj.h"

int druk(char *s, char *pattern) {
  regex_t p;               // wyrazenie regularne
  regmatch_t pm[2];        // wynik 
  regoff_t last_match = 0; // indeks, od ktorego szukamy w lancuchu
  char *buf;               // pomocniczy lancuch - tylko do wydruku
  int pierwszeSzukane = 1; // czy pierwsze wejscie
  
  buf = malloc(sizeof(char) * strlen(s)); // bufor na wydruk pomocniczy
  
  // Kompilacja wyrazenia regularnego
  regcomp(&p, pattern, 0);

  // Wydruk argumentow
  printf("Lancuch:\n%s\n", s);
  printf("Wzorzec:\n%s\n", pattern);
  //puts("- - - - - - - - - - - - - - - - - - - - - - - - - - -");
  
  // Wyszukiwanie wszystkich podlancuchow pasujacych do wzorca  
  while (regexec(&p, s+last_match, 2, pm, 0) == 0) {
    if(pierwszeSzukane)
	  pierwszeSzukane = 0;
    // pm[0].rm_so - offset poczatku dopasowania
    // pm[0].rm_eo - offset nastepnego znaku po dopasowaniu
    printf("znaki <%d", pm[0].rm_so + last_match);
    printf(", %d) ", pm[0].rm_eo + last_match);
    memcpy(buf, &s[pm[0].rm_so + last_match], pm[0].rm_eo - pm[0].rm_so);
    buf[ pm[0].rm_eo - pm[0].rm_so ] = '\0';
    printf("z dopasowaniem \"%s\"\n", buf);
    // ustawienie, od ktorego indeksu szukamy w natepnej iteracji
    last_match += pm[0].rm_so + 1; 
  }
    
  free(buf);
  regfree(&p);
  
  if(pierwszeSzukane)
    printf("BRAK DOPASOWAN\n");
  
  return 0;
}